/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Menu.java
 *
 * Created on 16-mar-2011, 15.01.43
 */

package Grafica;

import Run.*;
import java.util.ArrayList;

/**
 *
 * @author Luca
 */
public class Menu extends javax.swing.JFrame {
    GestoreFinestre gestoreFinestre;
    GestorePartita gestorePartita;
    /** Creates new form Menu */
    public Menu(GestoreFinestre gestoreFinestre, GestorePartita gestorePartita) {
        this();
        this.gestoreFinestre=gestoreFinestre;
        this.gestorePartita = gestorePartita;
        this.gestorePartita.getGiocatore().setGuiMenu(this);

    }
    public Menu() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        contenitoreMenu = new javax.swing.JPanel();
        sfondo = new Grafica.PannelloConSfondo("images/menu.jpg",true);
        jButton1 = new javax.swing.JButton();
        nomeGiocatore = new javax.swing.JTextField();
        crea = new javax.swing.JButton();
        unisciti = new javax.swing.JButton();
        ipGiocatore = new javax.swing.JTextField();
        inizia = new javax.swing.JButton();
        annulla = new javax.swing.JButton();
        nomeGiocatori = new javax.swing.JScrollPane();
        nomeGiocatoriTabella = new javax.swing.JList();
        cancella = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(0, 0, 0));

        contenitoreMenu.setBackground(new java.awt.Color(0, 0, 0));

        sfondo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        jButton1.setText("jButton1");
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jButton1MousePressed(evt);
            }
        });

        javax.swing.GroupLayout sfondoLayout = new javax.swing.GroupLayout(sfondo);
        sfondo.setLayout(sfondoLayout);
        sfondoLayout.setHorizontalGroup(
            sfondoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(sfondoLayout.createSequentialGroup()
                .addGap(177, 177, 177)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 407, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(145, Short.MAX_VALUE))
        );
        sfondoLayout.setVerticalGroup(
            sfondoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(sfondoLayout.createSequentialGroup()
                .addGap(180, 180, 180)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 220, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(149, Short.MAX_VALUE))
        );

        nomeGiocatore.setBackground(new java.awt.Color(0, 0, 0));
        nomeGiocatore.setFont(new java.awt.Font("MS UI Gothic", 3, 18));
        nomeGiocatore.setForeground(new java.awt.Color(153, 153, 153));
        nomeGiocatore.setText("NOME GIOCATORE");
        nomeGiocatore.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153)));

        crea.setBackground(new java.awt.Color(0, 0, 0));
        crea.setForeground(new java.awt.Color(153, 153, 153));
        crea.setText("CREA PARTITA");
        crea.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                creaActionPerformed(evt);
            }
        });

        unisciti.setBackground(new java.awt.Color(0, 0, 0));
        unisciti.setForeground(new java.awt.Color(153, 153, 153));
        unisciti.setText("UNISCITI");
        unisciti.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                uniscitiActionPerformed(evt);
            }
        });

        ipGiocatore.setBackground(new java.awt.Color(0, 0, 0));
        ipGiocatore.setFont(new java.awt.Font("MS UI Gothic", 3, 18));
        ipGiocatore.setForeground(new java.awt.Color(153, 153, 153));
        ipGiocatore.setText(Rete.Utils.trovaProprioIP());
        ipGiocatore.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153)));

        inizia.setBackground(new java.awt.Color(0, 0, 0));
        inizia.setForeground(new java.awt.Color(153, 153, 153));
        inizia.setText("INIZIA");
        inizia.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        inizia.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                iniziaActionPerformed(evt);
            }
        });

        annulla.setBackground(new java.awt.Color(0, 0, 0));
        annulla.setForeground(new java.awt.Color(153, 153, 153));
        annulla.setText("ANNULLA");
        annulla.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                annullaActionPerformed(evt);
            }
        });

        nomeGiocatoriTabella.setBackground(new java.awt.Color(0, 0, 0));
        nomeGiocatoriTabella.setForeground(new java.awt.Color(255, 255, 255));
        nomeGiocatoriTabella.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        nomeGiocatori.setViewportView(nomeGiocatoriTabella);

        cancella.setBackground(new java.awt.Color(0, 0, 0));
        cancella.setForeground(new java.awt.Color(153, 153, 153));
        cancella.setLabel("CANCELLA");
        cancella.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancellaActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout contenitoreMenuLayout = new javax.swing.GroupLayout(contenitoreMenu);
        contenitoreMenu.setLayout(contenitoreMenuLayout);
        contenitoreMenuLayout.setHorizontalGroup(
            contenitoreMenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(contenitoreMenuLayout.createSequentialGroup()
                .addComponent(sfondo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(110, 110, 110)
                .addGroup(contenitoreMenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(crea, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE)
                    .addComponent(cancella, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE)
                    .addComponent(annulla, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE)
                    .addComponent(inizia, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE)
                    .addComponent(unisciti, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE)
                    .addComponent(nomeGiocatori, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE)
                    .addComponent(nomeGiocatore, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE)
                    .addComponent(ipGiocatore, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE))
                .addGap(38, 38, 38))
        );
        contenitoreMenuLayout.setVerticalGroup(
            contenitoreMenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(sfondo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(contenitoreMenuLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(nomeGiocatore, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(ipGiocatore, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(crea, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(unisciti, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(inizia, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(annulla, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(cancella, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(32, 32, 32)
                .addComponent(nomeGiocatori, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(37, 37, 37))
        );

        inizia.setVisible(false);
        annulla.setVisible(false);
        cancella.setVisible(false);

        getContentPane().add(contenitoreMenu, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void uniscitiActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_uniscitiActionPerformed
        System.out.println("premuto UNISCITI"); //bloccante finche' il server non risponde (da mettere un timeout) ----------- DA FARE -------------
        
        cancella.setVisible(true);
        crea.setVisible(false);
        unisciti.setVisible(false);
        
        gestorePartita.getGiocatore().setNomeGiocatore(nomeGiocatore.getText());
        gestorePartita.getGiocatore().setIpServer(ipGiocatore.getText());
        gestorePartita.getGiocatore().uniscitiAllaPartitaSulServer();
    //    aggiornaTabellaGiocatori();
        nomeGiocatore.setEditable(false);
    }//GEN-LAST:event_uniscitiActionPerformed

    private void creaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_creaActionPerformed
        System.out.println("premuto CREA");

        inizia.setVisible(true);
        annulla.setVisible(true);
        unisciti.setVisible(false);
        crea.setVisible(false);
        nomeGiocatore.setEditable(false);
        
        gestorePartita.creaPartita(); // creo la partita
        gestorePartita.getGiocatore().setNomeGiocatore(nomeGiocatore.getText());
        gestorePartita.getGiocatore().setIpServer("127.0.0.1"); // me stesso
        // mi unisco alla partita che ho creato
   //     gestorePartita.getGiocatore().uniscitiAllaPartitaSulServer(); VECCHIO
        gestorePartita.uniscitiAllaPartita();
        Rete.Utils.dormi(50);
        gestorePartita.aggiornaGiocatori();    // visualizzo i cambiamenti nella lista dei giocatori
        
    }//GEN-LAST:event_creaActionPerformed

    private void jButton1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton1MousePressed
        gestoreFinestre.passaAlTavolo(); //////////////////////////////////////////////////////////////////////////////////////////////////////
    }//GEN-LAST:event_jButton1MousePressed

    private void iniziaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_iniziaActionPerformed
        System.out.println("INIZIA");
        // il giocatore corrente (127.0.0.1) dice al server di iniziare, il quale comunica agli altri client di passare al campo da gioco
        // --------------- DA FARE ----------------
    }//GEN-LAST:event_iniziaActionPerformed

    private void annullaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_annullaActionPerformed
        System.out.println("ANNULLA");

        inizia.setVisible(false);
        annulla.setVisible(false);
        unisciti.setVisible(true);
        crea.setVisible(true);
        nomeGiocatore.setEditable(true);
        // annullare la partita sul server (cioè comunicare agli altri che la partita non c'e' piu') ------------------ DA FARE -------------------
        //svuoto la tabella dei giocatori
        nomeGiocatoriTabella.setModel(new javax.swing.AbstractListModel()
        {

            public int getSize()
            {
                return 0;
            }
            public Object getElementAt(int i)
            {
                return "";
            }

        });
        nomeGiocatoriTabella.repaint();//nomeGiocatoriTabella.updateUI();

    }//GEN-LAST:event_annullaActionPerformed

    private void cancellaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancellaActionPerformed
        System.out.println("premuto CANCELLA");
        
        cancella.setVisible(false);
        crea.setVisible(true);
        unisciti.setVisible(true);
        nomeGiocatore.setEditable(true);

        gestorePartita.getGiocatore().cancellaDaServer();
        //svuoto la tabella dei giocatori
        nomeGiocatoriTabella.setModel(new javax.swing.AbstractListModel()
        {

            public int getSize()
            {
                return 0;
            }
            public Object getElementAt(int i)
            {
                return "";
            }

        });
        nomeGiocatoriTabella.repaint();//.updateUI();
    }//GEN-LAST:event_cancellaActionPerformed
    public void aggiornaTabellaGiocatori(ArrayList<String> g)
    {
        final ArrayList<String> giocatori = g;
        nomeGiocatoriTabella.setModel(new javax.swing.AbstractListModel()
        {        
       //     ArrayList<String> giocatori = giocatori1; //VECCHIO

            public int getSize()
            {     
                return giocatori.size();
            }
            public Object getElementAt(int i)
            {
                return giocatori.get(i);
            }

        });
        nomeGiocatoriTabella.repaint();//.updateUI();
    }
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Menu().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton annulla;
    private javax.swing.JButton cancella;
    private javax.swing.JPanel contenitoreMenu;
    private javax.swing.JButton crea;
    private javax.swing.JButton inizia;
    private javax.swing.JTextField ipGiocatore;
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField nomeGiocatore;
    private javax.swing.JScrollPane nomeGiocatori;
    private javax.swing.JList nomeGiocatoriTabella;
    private javax.swing.JPanel sfondo;
    private javax.swing.JButton unisciti;
    // End of variables declaration//GEN-END:variables

}
